package com.monster.service;

import com.monster.pojo.Playlist;
import com.monster.pojo.User;

import java.util.ArrayList;

public interface UserService {
    /**
     * 通过用户id查询用户信息
     * @param userId
     * @return user - 用户信息
     */
    User getUserById(Long userId);

    /**
     * 判断手机号是否已被注册，已注册返回用户id，未注册返回null
     * @param phoneNumber
     * @return 已注册 - 用户id，未注册 - null
     */
    Long isRegistered(String phoneNumber);

    /**
     * 判断手机号和密码是否正确，正确返回用户Id,错误或不存在返回null
     * @param phoneNumber
     * @param password
     * @return 正确 - userId，失败 - null
     */
    Long toLogin(String phoneNumber, String password);

    /**
     * 注册用户，成功返回true，失败返回false
     * @param user 用户信息
     * @return 成功 - true，失败 - false
     */
    boolean register(User user);

    /**
     * 更新用户信息，成功返回true，失败返回false
     * @param user 用户信息
     * @return 成功 - true，失败 - false
     */
    boolean updateUser(User user);

    /**
     * 根据用户id和关键字获得用户的收藏（我喜欢）的歌曲、歌单或专辑的列表分页
     * @param userId 用户id
     * @param key 关键字，其中“song”为歌曲，“playlist”为歌单，“album”为专辑
     * @return 用户的收藏（我喜欢）的歌曲、歌单或专辑的列表
     */
    ArrayList<Object> listMyLike(Long userId, String key, int page);

    /**
     * 根据用户id和关键字获得用户关注的歌手或用户列表分页
     * @param userId 用户id
     * @param key 关键字，其中“singer”为歌手，“user”为用户
     * @param page 页码
     * @return 用户关注的歌手或用户列表
     */
    ArrayList<Object> listFocus(Long userId, String key, int page);

    /**
     * 根据用户id分页查询获得粉丝用户的id、name、Head和关注数
     * @param userId 用户ID
     * @param page 页码
     * @return 粉丝用户的id、name和Head
     */
    ArrayList<User> listFans(Long userId, int page);

    /**
     * 新增歌单
     * @param playlist 歌单信息
     * @return 创建成功-true，创建失败-false
     */
    boolean addPlaylist(Playlist playlist);

    /**
     * 更新歌单
     * @param playlist 更新后的歌单信息
     * @return 更新成功-true，更新失败-false
     */
    boolean updatePlaylist(Playlist playlist);

    /**
     * 删除歌单
     * @param playlistId 要删除的歌单id
     * @return 删除成功-true，删除失败-false
     */
    boolean deletePlaylist(Long playlistId);

    /**
     * 将歌曲添加到歌单中
     * @param playlistId 歌单Id
     * @param songId 要添加的歌曲Id
     * @return 添加成功-true，失败-false
     */
    boolean addSongToPlaylist(Long playlistId, Long songId);

    /**
     * 从歌单中删除歌曲
     * @param playlistId 歌单Id
     * @param songId 要删除的歌曲Id
     * @return 删除成功-true， 删除失败-false
     */
    boolean deleteSongFromPlaylist(Long playlistId, Long songId);

    /**
     * 根据用户Id分页查询创建的歌单列表
     * @param userId 用户Id
     * @param page 页码
     * @return 创建的歌单集合
     */
    ArrayList<Playlist> listCreatedPlaylist(Long userId, int page);

    /**
     * 根据用户Id分页查询创建的歌单列表
     * @param userId 用户Id
     * @param page 页码
     * @return 创建的歌单集合
     * 包括空歌单
     */
    public ArrayList<Playlist> listSetPlaylist(Long userId, int page);
}
